草庐IT

vc x86.mis

全部标签

linux - x86-64 SysV ABI 中参数和返回值寄存器的高位是否允许垃圾?

x86-64SysVABI指定了如何在寄存器中传递函数参数(在rdi中的第一个参数,然后是rsi等),以及如何将整数返回值传回(在rax和然后rdx对于非常大的值)。然而,我找不到的是,当传递小于64位的类型时,参数或返回值寄存器的高位应该是什么。例如,对于以下函数:voidfoo(unsignedx,unsignedy);...x将在rdi中通过和y在rsi,但它们只有32位。做rdi的高32位和rsi必须为零?直觉上,我会假设是的,但是codegenerated所有gcc、clang和icc都有特定的mov开始时的指令将高位清零,因此编译器似乎另有假设。同样,编译器似乎假定返回值的

linux - x86-64 SysV ABI 中参数和返回值寄存器的高位是否允许垃圾?

x86-64SysVABI指定了如何在寄存器中传递函数参数(在rdi中的第一个参数,然后是rsi等),以及如何将整数返回值传回(在rax和然后rdx对于非常大的值)。然而,我找不到的是,当传递小于64位的类型时,参数或返回值寄存器的高位应该是什么。例如,对于以下函数:voidfoo(unsignedx,unsignedy);...x将在rdi中通过和y在rsi,但它们只有32位。做rdi的高32位和rsi必须为零?直觉上,我会假设是的,但是codegenerated所有gcc、clang和icc都有特定的mov开始时的指令将高位清零,因此编译器似乎另有假设。同样,编译器似乎假定返回值的

Android emulator64-x86 在启动过程中挂起

我正在使用64位Debian,当我尝试运行它时:$emulator64-x86-verbose-avdcocos2dx-emulator-gpuon-qemu-m2047-enable-kvm进程挂起,停止它的唯一方法是使用kill-9,这些是它打印的最后一行输出:[...]emulator:tryingtofind:/home/victor/lab/androidr16/android-sdk-linux/tools/bios.binemulator:tryingtofind:/home/victor/lab/androidr16/android-sdk-linux/tools/li

Android emulator64-x86 在启动过程中挂起

我正在使用64位Debian,当我尝试运行它时:$emulator64-x86-verbose-avdcocos2dx-emulator-gpuon-qemu-m2047-enable-kvm进程挂起,停止它的唯一方法是使用kill-9,这些是它打印的最后一行输出:[...]emulator:tryingtofind:/home/victor/lab/androidr16/android-sdk-linux/tools/bios.binemulator:tryingtofind:/home/victor/lab/androidr16/android-sdk-linux/tools/li

c - x86-64 上的 long double 是什么?

有人告诉我:Underx86-64,FParithmeticisdonewithSSE,andthereforelongdoubleis64bits.但是在x86-64ABI中它说:C型大小对齐AMD64架构长双161680位扩展(IEEE-754)参见:amd64-abi.pdfgcc说sizeof(longdouble)是16并给出FLT_DBL=1.79769e+308和FLT_LDBL=1.18973e+4932所以我很困惑,longdouble是64位的吗?我认为这是一个80位表示。 最佳答案 Underx86-64,FP

c - x86-64 上的 long double 是什么?

有人告诉我:Underx86-64,FParithmeticisdonewithSSE,andthereforelongdoubleis64bits.但是在x86-64ABI中它说:C型大小对齐AMD64架构长双161680位扩展(IEEE-754)参见:amd64-abi.pdfgcc说sizeof(longdouble)是16并给出FLT_DBL=1.79769e+308和FLT_LDBL=1.18973e+4932所以我很困惑,longdouble是64位的吗?我认为这是一个80位表示。 最佳答案 Underx86-64,FP

linux - 32 位 x86 汇编中堆栈对齐的职责

我试图清楚地了解谁(调用者或被调用者)负责堆栈对齐。64位汇编的情况很清楚,它是由caller完成的。引用SystemVAMD64ABI,第3.2.2节堆栈框架:Theendoftheinputargumentareashallbealignedona16(32,if__m256ispassedonstack)byteboundary.换句话说,应该安全地假设,对于被调用函数的每个入口点:16|(%rsp+8)持有(额外八个是因为call隐含地将返回地址压入堆栈)。它在32位世界中看起来如何(假设cdecl)?我注意到gcc使用以下构造将对齐放在被调用函数中:andesp,-16这似乎

linux - 32 位 x86 汇编中堆栈对齐的职责

我试图清楚地了解谁(调用者或被调用者)负责堆栈对齐。64位汇编的情况很清楚,它是由caller完成的。引用SystemVAMD64ABI,第3.2.2节堆栈框架:Theendoftheinputargumentareashallbealignedona16(32,if__m256ispassedonstack)byteboundary.换句话说,应该安全地假设,对于被调用函数的每个入口点:16|(%rsp+8)持有(额外八个是因为call隐含地将返回地址压入堆栈)。它在32位世界中看起来如何(假设cdecl)?我注意到gcc使用以下构造将对齐放在被调用函数中:andesp,-16这似乎

linux - 如何解释 x86-64 上的段寄存器访问?

有了这个功能:mov1069833(%rip),%rax#0x2b5c1bf9ef90add%fs:0x0,%raxretq我如何解释第二条指令并找出添加到RAX中的内容? 最佳答案 这段代码:mov1069833(%rip),%rax#0x2b5c1bf9ef90add%fs:0x0,%raxretq返回线程局部变量的地址。%fs:0x0是TCB(线程控制block)的地址,1069833(%rip)是从那里到变量的偏移量,这是已知的,因为变量驻留在程序中或在程序加载时加载的某些动态库中(在运行时通过dlopen()加载的库需要一

linux - 如何解释 x86-64 上的段寄存器访问?

有了这个功能:mov1069833(%rip),%rax#0x2b5c1bf9ef90add%fs:0x0,%raxretq我如何解释第二条指令并找出添加到RAX中的内容? 最佳答案 这段代码:mov1069833(%rip),%rax#0x2b5c1bf9ef90add%fs:0x0,%raxretq返回线程局部变量的地址。%fs:0x0是TCB(线程控制block)的地址,1069833(%rip)是从那里到变量的偏移量,这是已知的,因为变量驻留在程序中或在程序加载时加载的某些动态库中(在运行时通过dlopen()加载的库需要一